/// @umijs/plugin-dva 使用步骤
// 1. 创建 UI 组件或者页面
// 2. 创建 model (类似 Vuex 的 module)
// 3. 连接 UI 与 model

import { getGoodCategory } from '@/services/goods';

export default {
  // 默认与文件同名，不可重复
  namespace: 'category',

  // 状态库 (类似 Vuex 的 store)
  state: {
    category: [],
  },

  // 异步处理
  effects: {
    // * 使用 Generator 函数解决异步问题
    *getCategory({ payload, callback }, { put, call }) {
      // 获取商品分类数据
      const rep = yield call(getGoodCategory);

      // 调用 reducers 传递数据
      yield put({ type: 'setCategory', payload: rep });
    },
  },

  // 用于处理同步操作，唯一可以修改 state 的地方
  reducers: {
    setCategory(state, action) {
      return { ...state, category: action.payload };
    },
  },

  // 订阅
  // https://www.jianshu.com/p/0ca53099c785
  subscriptions: {
    setup({ dispatch, history }) {
      history.listen((location: Location) => {
        console.log('当前页面路径', location);
      });
    },
  },
};
